 <?PHP
require_once _DIRETORIO_BACKEND_._SEPARADOR_DIRETORIO_.'db.php';
require_once _DIRETORIO_BACKEND_VO_._SEPARADOR_DIRETORIO_.'VOestado.php';
require_once _DIRETORIO_BACKEND_DB_._SEPARADOR_DIRETORIO_.'Paginacao.php';
/**
* Esta Classe é responsável por inserir,atualizar,buscar ou excluir um registro
* de estado.
* @name DBestado
* @version 0.1
* @access public
* @package DB
**/
abstract Class DBestado{
	/**
	 * Método responsável por retornar os dados. 
	 * @param int $idEstado
	 * @access public
	 * @return oVO estado
	 */
	public function getByID($idEstado){
            $DB= new DB();
            $dbh = $DB->conec();
            $oVO = new VOestado();
            try{
                $sql = "SELECT * FROM ESTADO WHERE idEstado =:idEstado";
                $stmt = $dbh->prepare($sql);
                $stmt->bindParam (':idEstado',$idEstado,PDO::PARAM_INT);
                $stmt->execute();
                $oVO = $stmt->fetch(PDO::FETCH_OBJ);
            } 
            catch(PDOException $e){
                $DB->DBerror($e,$sql);
            }
            return $oVO;
	}
        
        /**
         * Método responsável por buscar todos os estados
         * @access public
         * @return array $estados
         */
        public function select(){
            $DB= new DB();
            $dbh = $DB->conec();            
            try{
                $sql = "SELECT * FROM ESTADO";
                $stmt = $dbh->prepare($sql); 
                $stmt->execute();
                $result = $stmt->fetchAll(PDO::FETCH_CLASS,"VOestado");
            } 
            catch(PDOException $e){
                $DB->DBerror($e,$sql);
            }
            return $result;
	}
        
	/**
	 * Método responsável por montar um Sql de busca. 
	 * @param objeto $oVO 
	 * @param $pag 
	 * @access public
	 * @return resultado da Busca.
	 */
	public function get($oVO,$pag,$limitePagina){
            $DB = new DB();
            $dbh = $DB->conec();
            if(!isset($first)){$first = false;}
            try{
                $sql = "SELECT * FROM ESTADO";
                if(!empty($oVO->idEstado)){
                    $sql.=$this->getSQLFirst($first)."idEstado =:idEstado";
                }
                if(!empty($oVO->nome)){
                    $sql.=$this->getSQLFirst($first)."nome like :nome";
                }
                if(!empty($oVO->sigla)){
                    $sql.=$this->getSQLFirst($first)."sigla =:sigla";
                }

                $sql.=" order by nome";

                if(isset($pag)){
                    $pg1 = ($limitePagina*($pag-1));
                    $sql.=" limit ".$pg1." , ".$limitePagina;
                }

                $stmt = $dbh->prepare($sql);
                if(!empty($oVO->idEstado)){
                    $stmt->bindParam(':idEstado',$oVO->idEstado,PDO::PARAM_INT);
                }
                if(!empty($oVO->nome)){
                    $oVO->nome = "%".$oVO->nome."%";
                    $stmt->bindParam(':nome',$oVO->nome,PDO::PARAM_STR);
                }
                if(!empty($oVO->sigla)){
                    $oVO->sigla = "%".$oVO->sigla."%";
                    $stmt->bindParam(':nome',$oVO->sigla,PDO::PARAM_STR);
                } 
                $stmt->execute();
                $result = $stmt->fetchAll(PDO::FETCH_CLASS,"VOestado");
            }
            catch (PDOException $e){
                $DB->DBerror($e, $sql);
            }
            return $result;
	}
	
  	/**
	 * Método responsável por adicionar à string do SQl a clausula WHERE ou AND. 
	 * @param boolean $first 
	 * @access public
	 * @return Where ou AND.
	 */
	public function getSqlFirst(&$first){
	    $return = " AND ";
	    if($first){$return=" WHERE ";$first=true;}
	    return($return);
	}
	
   	/**
	 * Método responsável por inserir ou atulizar um registro. 
	 * @param objeto $oVO 
	 * @access public
	 */	
	public function save($oVO){
            $DB = new DB();
            $dbh = $DB->conec();
            if($oVO->idEstado > 0){
                $sql = "UPDATE ESTADO SET 
                               sigla =:sigla
                               ,nome =:nome
                         WHERE idEstado =:idEstado" ;
                $stmt = $dbh->prepare($sql);
                $stmt->bindParam(':idEstado',$oVO->idEstado,PDO::PARAM_INT);
            } else {
                $sql = "INSERT INTO ESTADO 
                                   (nome, sigla)
                             VALUES
                                   (:nome, :sigla)";         
                $stmt = $dbh->prepare($sql);
            }
            $stmt->bindParam(':nome',mb_convert_encoding($oVO->nome, "ISO-8859-1", "UTF-8"),PDO::PARAM_STR);
            $stmt->bindParam(':sigla',mb_convert_encoding($oVO->sigla, "ISO-8859-1", "UTF-8"),PDO::PARAM_STR);
            $stmt->execute();
	}
		
	/**
	 * Método responsável por deletar um registro. 
	 * @param int $idEstado
	 * @access public
	 */
	public function delete($idEstado){
            $DB = new DB();
            $dbh = $DB->conec();	
            $sql = "DELETE FROM ESTADO WHERE idEstado=:idEstado";
            $stmt = $dbh->prepare($sql);
            $stmt->bindParam(':idEstado',$idEstado,PDO::PARAM_INT);
            $stmt->execute();
	}

}
